import axios from 'axios'

// 创建axios实例
const service = axios.create({
  baseURL: '/api', // 基础URL，与vite.config.js中的代理配置保持一致
  timeout: 5000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 可以在这里添加token等认证信息
    // const token = localStorage.getItem('token')
    // if (token) {
    //   config.headers.Authorization = `Bearer ${token}`
    // }
    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  response => {
    const res = response.data
    
    // 处理Result<T>类型的统一响应
    if (res && res.code !== undefined && res.message !== undefined && res.data !== undefined) {
      // 兼容前端现有代码的处理逻辑
      // 1. 对于列表查询接口，保持list和total字段
      if (res.data && (res.data.list !== undefined || res.data.total !== undefined)) {
        return {
          list: res.data.list || [],
          total: res.data.total || 0,
          success: res.code === 200,
          message: res.message
        }
      }
      // 2. 对于操作接口，保持success和message字段
      return {
        success: res.code === 200,
        message: res.message,
        data: res.data
      }
    }
    
    // 对于非Result<T>类型的响应，保持原有行为
    return res
  },
  error => {
    console.error('响应错误:', error)
    // 统一错误提示
    let errorMessage = '网络错误，请稍后重试'
    if (error.response) {
      const res = error.response.data
      if (res && res.message) {
        errorMessage = res.message
      } else if (error.response.status === 401) {
        errorMessage = '请先登录'
      } else if (error.response.status === 403) {
        errorMessage = '没有权限'
      } else if (error.response.status === 404) {
        errorMessage = '请求的资源不存在'
      }
    }
    
    // 将错误信息放入error对象中，便于上层组件处理
    error.message = errorMessage
    return Promise.reject(error)
  }
)

export default service